package com.haohan.jingyuan.customer.dao;

import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.haohan.jingyuan.customer.entity.CustomerGroupInfo;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;

import java.util.List;

/**
 * 客户分组Mapper接口
 * 
 * @ClassName CustomerGroupMapper
 * @Description 客户分组数据访问层
 * @Author hexijun
 * @Time 2025/01/19 20:00
 * @Version 1.0
 */
@Mapper
public interface CustomerGroupMapper extends BaseMapper<CustomerGroupInfo> {

    /**
     * 根据分组ID查询分组信息
     * 
     * @param id 分组ID
     * @return 分组信息
     */
    CustomerGroupInfo findById(@Param("id") Long id);

    /**
     * 根据分组ID查询分组信息
     * 
     * @param groupId 分组ID
     * @return 分组信息
     */
    CustomerGroupInfo findByGroupId(@Param("groupId") String groupId);

    /**
     * 根据分组名称查询分组信息（查询未删除的记录，ukid=0）
     * 
     * @param groupName 分组名称
     * @return 分组信息
     */
    CustomerGroupInfo findByGroupName(@Param("groupName") String groupName);

    /**
     * 根据分组ID和类型查询分组信息
     * 
     * @param groupId 分组ID
     * @param type 分组类型：1-客户分组；2-客户文件分组
     * @return 分组信息
     */
    CustomerGroupInfo findByGroupIdAndType(@Param("groupId") String groupId, @Param("type") Integer type);

    /**
     * 查询所有分组列表（按创建时间倒序）
     * 
     * @return 分组列表
     */
    List<CustomerGroupInfo> selectAll();

    /**
     * 根据分组类型查询分组列表（按创建时间倒序）
     * 
     * @param type 分组类型：1-客户分组；2-客户文件分组
     * @return 分组列表
     */
    List<CustomerGroupInfo> selectByType(@Param("type") Integer type);

    /**
     * 根据分组类型和上级分组ID查询分组列表（按创建时间倒序）
     * 
     * @param type 分组类型：1-客户分组；2-客户文件分组
     * @param parentGroupId 上级分组ID（可选）
     * @return 分组列表
     */
    List<CustomerGroupInfo> selectByTypeAndParentGroupId(@Param("type") Integer type, @Param("parentGroupId") String parentGroupId);

    /**
     * 统计指定分组ID的分组数量
     * 
     * @param groupId 分组ID
     * @return 数量
     */
    int countByGroupId(@Param("groupId") String groupId);

    /**
     * 统计指定上级分组ID的子分组数量
     * 
     * @param parentGroupId 上级分组ID
     * @return 数量
     */
    int countByParentGroupId(@Param("parentGroupId") String parentGroupId);
}
